﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace University.Workshop.Business
{
    public class ManagerOtbData
    {

        public static void RegisterOtbData(Model.OtbData otbData)
        {
            ManagerPerson.UpdatePersonIfExisteElseCreate(otbData.Person);
            otbData.PresidentId = otbData.Person.PersonId;
            otbData.Person = null;
            DataAccess.DataAccessOtbData.RegisterOtbData(otbData);
        }

        public static void VerifyOtbDataIsCorrect(Model.OtbData mp)
        {
            if (mp.Name == string.Empty)
                throw new Exception("Se requiere un nombre.");
            if (mp.Managment == string.Empty)
                throw new Exception("La requiere de una gestion.");
            if (mp.ExpirationDay == null)
                throw new Exception("Se requiere de una fecha de expiracion.");
            if (mp.ExpirationDay > 28 || mp.ExpirationDay < 0)
                throw new Exception("El dia debe estar entre 1 y 28");
        }

        public static void VerifyDataPerson(Model.OtbData mp)
        {
            if (string.IsNullOrEmpty(mp.Person.PersonId))
                throw new Exception("Se necesita un Carnet de Identidad.");
            if (mp.Person.PersonId.Equals("0"))
                throw new Exception("El Numero de carnet que ingreso es invalido.");
            if (mp.Person.PersonId.Count() < 5)
                throw new Exception("El carnet de identidad debe contener al menos 5 digitos.");
            if (string.IsNullOrEmpty(mp.Person.Names))
                throw new Exception("Se necesita al menos un nombre");
            if (string.IsNullOrEmpty(mp.Person.LastNames))
                throw new Exception("Se necesita al menos un apellido");
        }

        public static void ModifyOtbData(Model.OtbData otbData)
        {
            Model.Person p = new Model.Person() {   Names = otbData.Person.Names, 
                                                    LastNames = otbData.Person.LastNames, 
                                                    Phone = otbData.Person.Phone, 
                                                    PersonId = otbData.Person.PersonId };
            ManagerPerson.UpdatePersonIfExisteElseCreate(p);
            otbData.Person = null;
            otbData.PresidentId = p.PersonId;
            DataAccess.DataAccessOtbData.ModifyOtb(otbData);
        }

        public static Model.OtbData GetCurrentOtbData()
        {
                ICollection<Model.OtbData> p = DataAccess.DataAccessOtbData.GetCurrentOtbData();
                if (p.Count == 0)
                    throw new Exception("No existen datos de OTB registrados sera redireccionado al registro");
                else
                    return p.First();
        }

        public static ICollection<Model.OtbData> SearchOtbDataByParameter(Model.OtbData otb)
        {
            ICollection<Model.OtbData> finded = DataAccess.DataAccessOtbData.SearchOtbDataByParameter(otb);
            if (finded.Count == 0)
            {
                throw new Exception("No se encontraron resultados de la busqueda...");
            }
            return finded;
        }
    }
}
